/*
 * SystemBuilder.h
 *
 *  Created on: 14 Jul 2011
 *      Author: al2010
 */

#ifndef SYSTEMBUILDER_H_
#define SYSTEMBUILDER_H_

// GeoReact includes
#include "Utils.h"

// GeoReact forward declarations
class Phase;
class Reaction;
class System;

namespace SystemBuilder 
{
	const System
	GenerateSystem(const StringVector& knownSpecies);
	
	const System
	GenerateSystemNoSpeciesGeneration(const StringVector& allSpecies);
	
	const StringVector
	FilterSpecies(const StringVector& species, const StringVector& tags);
	
	const StringVector
	RemoveSpecies(const StringVector& species, const StringVector& tags);
	
	const StringVector
	GenerateSpecies(const StringVector& knownSpecies);
	
	const StringVector
	GenerateBasisSpecies(const StringVector& secondarySpeciesOnly);
	
	const StringVector
	GenerateSecondarySpecies(const StringVector& basisSpeciesOnly);
	
	const vector<Phase>
	GeneratePhases(const StringVector& allSpecies);
	
	const vector<Reaction>
	GenerateReactions(const System& system);
};

#endif /* SYSTEMBUILDER_H_ */
